package com.qingmeng.project.service.impl;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qingmeng.apicommon.model.entity.InterfaceInfo;
import com.qingmeng.apicommon.model.entity.UserInterfaceInfo;
import com.qingmeng.apicommon.common.ErrorCode;
import com.qingmeng.apicommon.exception.BusinessException;
import com.qingmeng.project.mapper.UserInterfaceInfoMapper;
import com.qingmeng.project.service.InterfaceInfoService;
import com.qingmeng.project.service.UserInterfaceInfoService;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
* @author WPF
* @description 针对表【user_interface_info(接口信息表)】的数据库操作Service实现
* @createDate 2024-12-12 22:00:40
*/
@Service
public class UserInterfaceInfoServiceImpl extends ServiceImpl<UserInterfaceInfoMapper, UserInterfaceInfo>
    implements UserInterfaceInfoService {

    @Resource
    private InterfaceInfoService interfaceInfoService;

    /**
     * 校验接口信息
     *
     * @param userinterfaceInfo
     * @param add 是否为创建校验
     */
    @Override
    public void validUserInterfaceInfo(UserInterfaceInfo userinterfaceInfo, boolean add) {

        //判断接口信息是否为空，为空则返回异常信息
        if (userinterfaceInfo == null) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }
        // 如果是添加操作
        if (add) {
            //校验接口id和用户id是否正常
            if (userinterfaceInfo.getUserId() <= 0 || userinterfaceInfo.getInterfaceId() <= 0) {
                throw new BusinessException(ErrorCode.PARAMS_ERROR, "接口或用户不存在");
            }
        }

        //校验用户接口剩余调用次数是否为0
        if (userinterfaceInfo.getHaveNum() < 0) {
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "剩余调用次数不足");
        }
    }
    /**
     * 调用接口统计
     * @param userId
     * @param interfaceId
     */
    @Override
    public boolean invokeCountNum( long userId,long interfaceId) {
        //判断参数是否为空
        if (interfaceId <= 0 || userId <= 0){
            throw new BusinessException(ErrorCode.PARAMS_ERROR);
        }
        //判断接口是否存在
        InterfaceInfo interfaceInfo = interfaceInfoService.getById(interfaceId);
        if (ObjectUtils.isEmpty(interfaceInfo)){
            throw new BusinessException(ErrorCode.NOT_FOUND_ERROR);
        }
        // 判断接口是否为关闭状态
        if (interfaceInfo.getStatus() == 0){
            throw new BusinessException(ErrorCode.PARAMS_ERROR, "接口已关闭");
        }
        //修改接口调用次数（使用UpdateWrapper对象构建条件）
        UpdateWrapper<UserInterfaceInfo> updateWrapper = new UpdateWrapper<>();
        //设置条件（注意这里的内容都是直接添加到SQL语句中的，所以应该使用表的字段名，而不是实体类的属性名）
        updateWrapper.eq("interface_id", interfaceId)
                .eq("user_id", userId)
                .setSql("count_num = count_num + 1, have_num = have_num - 1");
        // 执行修改
        return this.update(updateWrapper);
    }



}




